Skip to main content

Ekspresi, Scope, dan Operator di Move

Kita telah membahas banyak konsep Move di Sui. Move di Sui juga menyediakan berbagai ekspresi. Mari kita pelajari tentang ekspresi-ekspresi tersebut serta bagaimana scope (cakupan) bekerja di Move di Sui.

Ekspresi di Sui

Sebuah unit kode yang mengembalikan sesuatu atau sebuah pernyataan yang diakhiri dengan tanda titik koma adalah sebuah ekspresi. “Sesuatu” itu bisa berupa integer, string, boolean, atau tipe data valid apa pun. Dengan aman bisa kita katakan bahwa fungsi adalah ekspresi karena mereka mengembalikan nilai.

Move di Sui memiliki 3 jenis ekspresi:

  • Kosong (Empty)
  • Literal
  • Blok (Block)

Mari kita eksplorasi ekspresi-ekspresi ini dengan contoh:

Ekspresi kosong (Empty expression)

Kita mungkin tidak akan pernah menggunakan ekspresi ini secara langsung, tetapi ada baiknya mengetahui bahwa kita punya opsi ekspresi kosong.

Cukup tambahkan tanda kurung kosong di body fungsi untuk membuat ekspresi kosong. Ekspresi ini secara otomatis diabaikan oleh VM, jadi tidak ada biaya tambahan untuk mendefinisikannya.

public fun function_name() {
()
}

Ekspresi literal (Literal expressions)

Kita sudah belajar mendefinisikan variabel dan konstanta, bukan?

Kabar baiknya, mendefinisikan mereka dan mengakhirinya dengan titik koma membuatnya menjadi sebuah ekspresi.

Berikut adalah contoh yang kita gunakan pada pelajaran Variabel dan Konstanta. Semua ini adalah ekspresi literal. Huh! Mudah sekali, kan 😃

let a;
let b : u8;
let c = true;
let d : u8 = 10;
  • Ekspresi paling sederhana bisa berupa 10 + 5; atau bahkan 2;. Kita sebenarnya menggunakan ekspresi-ekspresi ini untuk mendefinisikan variabel atau konstanta.

Ekspresi blok (Block expression)

Sebuah blok yang ditandai dengan {} adalah sebuah ekspresi. Blok bisa berisi ekspresi-ekspresi lain atau blok lain di dalamnya. Dan ia bisa mengembalikan nilai atau tidak. Jika suatu nilai merupakan nilai kembalian dari blok, tidak wajib diakhiri dengan titik koma.

module examples::example {
public fun function_name() {
// ini adalah sebuah blok
{ }; // ini juga
{ 3; // sebuah blok
{true;} // ekspresi lain di dalam sebuah blok
}
}
}

Scope di Move

Karena kita membahas ekspresi blok, kita juga perlu memahami bagaimana Scope (cakupan) bekerja di dalamnya. Secara definisi, scope adalah area di mana sebuah variabel “hidup” atau ada. Artinya, setiap kali kita mendefinisikan sebuah blok menggunakan {}, kita sedang mendefinisikan sebuah scope. Jadi semua variabel yang kita definisikan di scope tersebut dapat diakses, tetapi di luar scope tersebut, variabel itu tidak dapat digunakan.

Saya tahu ini mungkin membingungkan, jadi mari kita permudah dengan contoh:

module examples::example {
public fun function_name() {
// Ini adalah scope sebuah fungsi - Blok A
let a = 0;

{
let b = 0;
}; // ini adalah scope di dalam fungsi - Blok B

{ // Blok C
let c = 0;
{let flag = true;} // ini adalah scope bersarang - Blok D
}
}
}

Berdasarkan contoh di atas, kita bisa mencatat beberapa poin:

  • Apa pun yang didefinisikan di Blok A akan dapat diakses oleh Blok B, C, dan D. Artinya kita bisa mengakses a di mana saja dalam fungsi function_name.
  • Apa pun yang didefinisikan di Blok B tidak dapat diakses oleh Blok A, C, dan D. Artinya kita tidak bisa mengakses b di tempat lain.
  • Apa pun yang didefinisikan di Blok C tidak dapat diakses oleh Blok A dan B tetapi dapat diakses oleh Blok D karena D berada di dalam C. Artinya kita tidak bisa mengakses c di tempat lain kecuali di Blok C dan D.
  • Apa pun yang didefinisikan di Blok D tidak dapat diakses oleh Blok A, B, dan C. Artinya kita tidak bisa mengakses flag di mana pun kecuali di Blok D, bahkan tidak di Blok C.

Biarkan saya merangkum semuanya dalam satu kalimat untukmu: Variabel hanya “hidup” di dalam scope atau blok tempat variabel itu didefinisikan.

Karena kita sudah selesai dengan ekspresi dan scope, sekarang mari kita lihat dengan cepat operator apa yang dimiliki Move di Sui untuk bilangan bulat.

Operator Move

Move di Sui memiliki berbagai operator termasuk untuk tipe uint: u8, u64, u128.

Move memiliki beragam operator untuk memodifikasi nilai integer. Berikut daftarnya:

| Operator | Nama operator |
| --- | --- |
| + | sum |
| - | sub |
| / | div |
| * | mul |
| % | mod |
| << | lshift |
| >> | rshift |
| & | and |
| ^ | xor |
| | | or |

_ adalah sesuatu yang unik

Move di Sui tidak mengizinkan kamu mendeklarasikan variabel yang tidak digunakan; jika dilakukan akan muncul error. Efisien sekali, bukan?

Tetapi jika karena suatu alasan kita harus mendefinisikan sebuah nilai, ada “pintu belakang” untuk itu 😏.

Perhatikan kode berikut:

module examples::example {

public fun add() {
let sum = 1;
}
}

Ini akan menghasilkan error karena kita tidak menggunakan sum di mana pun. Namun, jika kita mengganti sum dengan _ seperti di bawah ini, kita tidak akan menerima error. Kereen!!

module examples::example {

public fun add() {
let _ = 1;
}
}

Penutup

Dalam pelajaran ini, kita membahas ekspresi di Move, termasuk ekspresi kosong, ekspresi literal, dan ekspresi blok. Kita juga mempelajari tentang scope dan bagaimana scope menentukan aksesibilitas variabel. Memahami ekspresi dan scope sangat penting untuk menulis kode yang efektif di Move di Sui. Terakhir, kita mempelajari operator yang tersedia di Move di Sui untuk bilangan bulat dan mengeksplorasi aspek unik dari Move di Sui. Dengan memahami operator-operator ini, kita bisa mulai menulis kode dasar.

Teruslah berlatih dan mengeksplorasi Move di Sui dalam perjalanan pemrogramanmu!